import socket

class TalkServer:
    def __init__(self):
        pass

    def send_receive(self):
        # 服务器如何接收消息
        # 1. 绑定一个确定的端口地址
        # 2. 启动监听端口的进程
        # 3. 准备接收信息
        # 4. 当有信息时，接收它
        server = socket.socket()
        server.bind(('192.168.49.1', 8000))
        server.listen()
        print("服务器启动成功，欢迎来聊...")

        while True:     # 外死循环，用于等待建立与客户端的通道，表示可以接受无数个。
            chanel, address = server.accept()  # 等待新的连接通道的建立：阻塞

            # 内死循环，用于接受来自于同一个连接通道的消息，但是，如果内循环没有结束，则无法接收第二个通道：多线程
            while True:
                from_msg = chanel.recv(1024).decode()   # 接收来自客户端的消息
                print('来自' + str(address) + '的消息：' + from_msg)

                to_msg = '服务器回复：' + from_msg    # 往客户端连接通道发消息
                chanel.send(to_msg.encode())


if __name__ == '__main__':
    ts = TalkServer()
    try:
        ts.send_receive()        # 只要receive方法中有异常发生，均会进入except分支运行其代码
    except:
        print("好像有异常出现，服务器自行停止.")
